{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Implementation of infoGANs\n",
    "Reference: https://arxiv.org/pdf/1606.03657.pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Run the comment below only when using Google Colab\n",
    "# !pip install torch torchvision"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torchvision\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from torch.utils.data import DataLoader\n",
    "from torchvision import datasets\n",
    "from torchvision import transforms\n",
    "from torchvision.utils import save_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import datetime\n",
    "import os, sys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from tensorboardX import SummaryWriter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from matplotlib.pyplot import imshow, imsave\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "MODEL_NAME = 'infoGAN'\n",
    "DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def to_onehot(x, num_classes=10):\n",
    "    assert isinstance(x, int) or isinstance(x, (torch.LongTensor, torch.cuda.LongTensor))\n",
    "    if isinstance(x, int):\n",
    "        c = torch.zeros(1, num_classes).long()\n",
    "        c[0][x] = 1\n",
    "    else:\n",
    "        x = x.cpu()\n",
    "        c = torch.LongTensor(x.size(0), num_classes)\n",
    "        c.zero_()\n",
    "        c.scatter_(1, x, 1) # dim, index, src value\n",
    "    return c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def sample_noise(batch_size, n_noise, n_c_discrete, n_c_continuous, label=None, supervised=False):\n",
    "    z = torch.randn(batch_size, n_noise).to(DEVICE)\n",
    "    if supervised:\n",
    "        c_discrete = to_onehot(label).to(DEVICE) # (B,10)\n",
    "    else:\n",
    "        c_discrete = to_onehot(torch.LongTensor(batch_size, 1).random_(0, n_c_discrete)).to(DEVICE) # (B,10)\n",
    "    c_continuous = torch.zeros(batch_size, n_c_continuous).uniform_(-1, 1).to(DEVICE) # (B,2)\n",
    "    c = torch.cat((c_discrete.float(), c_continuous), 1)\n",
    "    return z, c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def get_sample_image():\n",
    "    \"\"\"\n",
    "        save sample 100 images\n",
    "    \"\"\"\n",
    "    images = []\n",
    "    # continuous code\n",
    "    for cc_type in range(2):\n",
    "        for num in range(10):\n",
    "            fix_z = torch.randn(1, n_noise)\n",
    "            z = fix_z.to(DEVICE)\n",
    "            cc = -1\n",
    "            for i in range(10):\n",
    "                cc += 0.2\n",
    "                c_discrete = to_onehot(num).to(DEVICE) # (B,10)\n",
    "                c_continuous = torch.zeros(1, n_c_continuous).to(DEVICE)\n",
    "                c_continuous.data[:,cc_type].add_(cc)\n",
    "                c = torch.cat((c_discrete.float(), c_continuous), 1)\n",
    "                y_hat = G(z, c)\n",
    "                line_img = torch.cat((line_img, y_hat.view(28, 28)), dim=1) if i > 0 else y_hat.view(28, 28)\n",
    "            all_img = torch.cat((all_img, line_img), dim=0) if num > 0 else line_img\n",
    "        img = all_img.cpu().data.numpy()\n",
    "        images.append(img)\n",
    "    # discrete code\n",
    "    for num in range(10):\n",
    "        c_discrete = to_onehot(num).to(DEVICE) # (B,10)\n",
    "        for i in range(10):\n",
    "            z = torch.randn(1, n_noise).to(DEVICE)\n",
    "            c_continuous = torch.zeros(1, n_c_continuous).to(DEVICE)\n",
    "            c = torch.cat((c_discrete.float(), c_continuous), 1)\n",
    "            y_hat = G(z, c)\n",
    "            line_img = torch.cat((line_img, y_hat.view(28, 28)), dim=1) if i > 0 else y_hat.view(28, 28)\n",
    "        all_img = torch.cat((all_img, line_img), dim=0) if num > 0 else line_img\n",
    "    img = all_img.cpu().data.numpy()\n",
    "    images.append(img)\n",
    "    return images[0], images[1], images[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def log_gaussian(c, mu, var):\n",
    "    \"\"\"\n",
    "        criterion for Q(condition classifier)\n",
    "    \"\"\"\n",
    "    return -((c - mu)**2)/(2*var+1e-8) - 0.5*torch.log(2*np.pi*var+1e-8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Discriminator(nn.Module):\n",
    "    \"\"\"\n",
    "        Convolutional Discriminator for MNIST\n",
    "    \"\"\"\n",
    "    def __init__(self, in_channel=1):\n",
    "        super(Discriminator, self).__init__()\n",
    "        self.layer1 = nn.Sequential(# 28 -> 14\n",
    "            nn.Conv2d(in_channel, 64, 3, stride=2, padding=1, bias=False),\n",
    "            nn.BatchNorm2d(64),\n",
    "            nn.LeakyReLU(0.1),\n",
    "        )\n",
    "        self.layer2 = nn.Sequential(# 14 -> 7\n",
    "            nn.Conv2d(64, 128, 3, stride=2, padding=1, bias=False),\n",
    "            nn.BatchNorm2d(128),\n",
    "            nn.LeakyReLU(0.1),\n",
    "        )\n",
    "        self.layer3 = nn.Sequential(#\n",
    "            nn.Linear(128*7*7, 1024),\n",
    "            nn.BatchNorm1d(1024),\n",
    "            nn.LeakyReLU(0.1),\n",
    "        )\n",
    "        self.fc = nn.Sequential(\n",
    "            nn.Linear(1024, 1),\n",
    "            nn.Sigmoid(),\n",
    "        )\n",
    "    \n",
    "    def forward(self, x):\n",
    "        y_ = self.layer1(x)\n",
    "        y_ = self.layer2(y_)\n",
    "        y_ = y_.view(y_.size(0), -1)\n",
    "        y_ = self.layer3(y_)\n",
    "        d = self.fc(y_) # Real / Fake        \n",
    "        return d, y_ # return with top layer features for Q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Qrator(nn.Module):\n",
    "    \"\"\"\n",
    "        Regularization Network for increasing Mutual Information\n",
    "    \"\"\"\n",
    "    def __init__(self):\n",
    "        super(Qrator, self).__init__()\n",
    "        self.fc = nn.Sequential(\n",
    "            nn.Linear(1024, 128),\n",
    "            nn.BatchNorm1d(128),\n",
    "            nn.LeakyReLU(0.1),\n",
    "            nn.Linear(128, 14),\n",
    "        )\n",
    "        \n",
    "    def forward(self, x):\n",
    "        # Seperate code\n",
    "        c = self.fc(x)\n",
    "        c_discrete = torch.softmax(c[:, :10], dim=-1) # Digit Label {0~9}\n",
    "        c_mu = c[:, 10:12] # mu & var of Rotation & Thickness\n",
    "        c_var = c[:, 12:14].exp() # mu & var of Rotation & Thickness\n",
    "        return c_discrete, c_mu, c_var"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Generator(nn.Module):\n",
    "    \"\"\"\n",
    "        Convolutional Generator for MNIST\n",
    "    \"\"\"\n",
    "    def __init__(self, input_size=62, code_size=12, num_classes=784):\n",
    "        super(Generator, self).__init__()\n",
    "        self.layer1 = nn.Sequential(\n",
    "            nn.Linear(input_size+code_size, 1024),\n",
    "            nn.BatchNorm1d(1024),\n",
    "            nn.ReLU(),\n",
    "        )\n",
    "        self.layer2 = nn.Sequential(\n",
    "            nn.Linear(1024, 7*7*128),\n",
    "            nn.BatchNorm1d(7*7*128),\n",
    "            nn.ReLU(),\n",
    "        )\n",
    "        self.layer3 = nn.Sequential(# input: 7 by 7, output: 14 by 14\n",
    "            nn.ConvTranspose2d(128, 64, 4, stride=2, padding=1, bias=False),\n",
    "            nn.BatchNorm2d(64),\n",
    "            nn.ReLU(),\n",
    "        )\n",
    "        self.layer4 = nn.Sequential(# input: 14 by 14, output: 28 by 28\n",
    "            nn.ConvTranspose2d(64, 1, 4, stride=2, padding=1, bias=False),\n",
    "            nn.Tanh(),\n",
    "        )\n",
    "        \n",
    "    def forward(self, z, c):\n",
    "        z = z.view(z.size(0), -1)\n",
    "        c = c.view(c.size(0), -1)\n",
    "        noise = torch.cat((z, c), 1)\n",
    "#         print(noise.size())\n",
    "        x_ = self.layer1(noise)\n",
    "        x_ = self.layer2(x_)\n",
    "        x_ = x_.view(x_.size(0), 128, 7, 7)\n",
    "        x_ = self.layer3(x_)\n",
    "        x_ = self.layer4(x_)\n",
    "        return x_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "D = Discriminator().to(DEVICE)\n",
    "G = Generator().to(DEVICE)\n",
    "Q = Qrator().to(DEVICE)\n",
    "# D.load_state_dict('D_dc.pkl')\n",
    "# G.load_state_dict('G_dc.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "transform = transforms.Compose([transforms.ToTensor(),\n",
    "                                transforms.Normalize(mean=[0.5],\n",
    "                                std=[0.5])]\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mnist = datasets.MNIST(root='../data/', train=True, transform=transform, download=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 128"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data_loader = DataLoader(dataset=mnist, batch_size=batch_size, shuffle=True, drop_last=True, pin_memory=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "bce_loss = nn.BCELoss()\n",
    "ce_loss = nn.CrossEntropyLoss()\n",
    "\n",
    "D_opt = torch.optim.Adam(D.parameters(), lr=2e-4, betas=(0.5, 0.99))\n",
    "G_opt = torch.optim.Adam([{'params':G.parameters()}, {'params':Q.parameters()}], lr=1e-3, betas=(0.5, 0.99))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "max_epoch = 50 # need more than 200 epochs for training generator\n",
    "step = 0\n",
    "n_critic = 1 # for training more k steps about Discriminator\n",
    "n_noise = 62\n",
    "n_c_discrete, n_c_continuous = 10, 2\n",
    "\n",
    "D_labels = torch.ones([batch_size, 1]).to(DEVICE) # Discriminator Label to real\n",
    "D_fakes = torch.zeros([batch_size, 1]).to(DEVICE) # Discriminator Label to fake"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "writer = SummaryWriter()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 1/50, Step: 1000, D Loss: 0.06298446655273438, G Loss: 3.160252571105957, GnQ Loss: 4.77636194229126, Time: 2018-12-30 23:09:35\n",
      "Epoch: 2/50, Step: 1500, D Loss: 0.04377274215221405, G Loss: 4.579306602478027, GnQ Loss: 6.271612644195557, Time: 2018-12-30 23:10:03\n",
      "Epoch: 3/50, Step: 2000, D Loss: 0.3206389546394348, G Loss: 3.093998908996582, GnQ Loss: 4.614413738250732, Time: 2018-12-30 23:10:30\n",
      "Epoch: 4/50, Step: 2500, D Loss: 0.029062770307064056, G Loss: 5.295099258422852, GnQ Loss: 6.739851951599121, Time: 2018-12-30 23:10:59\n",
      "Epoch: 5/50, Step: 3000, D Loss: 0.02925865910947323, G Loss: 6.070171356201172, GnQ Loss: 7.490633964538574, Time: 2018-12-30 23:11:28\n",
      "Epoch: 6/50, Step: 3500, D Loss: 0.004611633252352476, G Loss: 5.727474212646484, GnQ Loss: 7.059477806091309, Time: 2018-12-30 23:11:56\n",
      "Epoch: 7/50, Step: 4000, D Loss: 0.010235895402729511, G Loss: 6.594085693359375, GnQ Loss: 8.046361923217773, Time: 2018-12-30 23:12:23\n",
      "Epoch: 8/50, Step: 4500, D Loss: 0.004614119417965412, G Loss: 8.070649147033691, GnQ Loss: 9.474993705749512, Time: 2018-12-30 23:12:51\n",
      "Epoch: 9/50, Step: 5000, D Loss: 0.007598033174872398, G Loss: 7.66144323348999, GnQ Loss: 9.21728515625, Time: 2018-12-30 23:13:19\n",
      "Epoch: 10/50, Step: 5500, D Loss: 0.004026147071272135, G Loss: 8.109292984008789, GnQ Loss: 9.50838851928711, Time: 2018-12-30 23:13:47\n",
      "Epoch: 11/50, Step: 6000, D Loss: 0.004945230670273304, G Loss: 9.941895484924316, GnQ Loss: 11.371874809265137, Time: 2018-12-30 23:14:15\n",
      "Epoch: 12/50, Step: 6500, D Loss: 0.009342798963189125, G Loss: 9.545965194702148, GnQ Loss: 11.11754035949707, Time: 2018-12-30 23:14:43\n",
      "Epoch: 13/50, Step: 7000, D Loss: 0.004483629949390888, G Loss: 8.0703125, GnQ Loss: 9.486629486083984, Time: 2018-12-30 23:15:10\n",
      "Epoch: 14/50, Step: 7500, D Loss: 0.02457614801824093, G Loss: 8.052715301513672, GnQ Loss: 9.608060836791992, Time: 2018-12-30 23:15:38\n",
      "Epoch: 16/50, Step: 8000, D Loss: 0.002442500786855817, G Loss: 9.777528762817383, GnQ Loss: 11.29565715789795, Time: 2018-12-30 23:16:06\n",
      "Epoch: 17/50, Step: 8500, D Loss: 0.009744455106556416, G Loss: 12.0247802734375, GnQ Loss: 13.590368270874023, Time: 2018-12-30 23:16:33\n",
      "Epoch: 18/50, Step: 9000, D Loss: 0.03664862737059593, G Loss: 8.721014022827148, GnQ Loss: 10.220942497253418, Time: 2018-12-30 23:17:01\n",
      "Epoch: 19/50, Step: 9500, D Loss: 0.035489726811647415, G Loss: 6.899810791015625, GnQ Loss: 8.30900764465332, Time: 2018-12-30 23:17:28\n",
      "Epoch: 20/50, Step: 10000, D Loss: 0.12751708924770355, G Loss: 7.257050514221191, GnQ Loss: 8.649088859558105, Time: 2018-12-30 23:17:56\n",
      "Epoch: 21/50, Step: 10500, D Loss: 0.009622413665056229, G Loss: 5.329919338226318, GnQ Loss: 6.74776554107666, Time: 2018-12-30 23:18:23\n",
      "Epoch: 22/50, Step: 11000, D Loss: 0.328407883644104, G Loss: 2.6937928199768066, GnQ Loss: 4.206907272338867, Time: 2018-12-30 23:18:51\n",
      "Epoch: 23/50, Step: 11500, D Loss: 0.5402380228042603, G Loss: 2.593252420425415, GnQ Loss: 4.099980354309082, Time: 2018-12-30 23:19:19\n",
      "Epoch: 24/50, Step: 12000, D Loss: 0.585486650466919, G Loss: 2.0331742763519287, GnQ Loss: 3.527742385864258, Time: 2018-12-30 23:19:46\n",
      "Epoch: 25/50, Step: 12500, D Loss: 0.5703316330909729, G Loss: 2.7280120849609375, GnQ Loss: 4.194521427154541, Time: 2018-12-30 23:20:14\n",
      "Epoch: 26/50, Step: 13000, D Loss: 0.6117827296257019, G Loss: 1.6383980512619019, GnQ Loss: 3.0625085830688477, Time: 2018-12-30 23:20:41\n",
      "Epoch: 27/50, Step: 13500, D Loss: 0.6882616281509399, G Loss: 1.9743623733520508, GnQ Loss: 3.434370279312134, Time: 2018-12-30 23:21:09\n",
      "Epoch: 28/50, Step: 14000, D Loss: 0.6264362335205078, G Loss: 1.9127581119537354, GnQ Loss: 3.3175299167633057, Time: 2018-12-30 23:21:36\n",
      "Epoch: 29/50, Step: 14500, D Loss: 0.6363024711608887, G Loss: 2.1040871143341064, GnQ Loss: 3.527904510498047, Time: 2018-12-30 23:22:04\n",
      "Epoch: 30/50, Step: 15000, D Loss: 0.5199268460273743, G Loss: 2.4174697399139404, GnQ Loss: 3.8246803283691406, Time: 2018-12-30 23:22:31\n",
      "Epoch: 32/50, Step: 15500, D Loss: 0.48892223834991455, G Loss: 1.946246862411499, GnQ Loss: 3.336038827896118, Time: 2018-12-30 23:22:59\n",
      "Epoch: 33/50, Step: 16000, D Loss: 0.4474170506000519, G Loss: 2.5273423194885254, GnQ Loss: 3.933720350265503, Time: 2018-12-30 23:23:26\n",
      "Epoch: 34/50, Step: 16500, D Loss: 0.608963131904602, G Loss: 1.8230952024459839, GnQ Loss: 3.226632595062256, Time: 2018-12-30 23:23:54\n",
      "Epoch: 35/50, Step: 17000, D Loss: 0.49063926935195923, G Loss: 2.2843916416168213, GnQ Loss: 3.6945436000823975, Time: 2018-12-30 23:24:22\n",
      "Epoch: 36/50, Step: 17500, D Loss: 0.45531633496284485, G Loss: 2.045042037963867, GnQ Loss: 3.443286180496216, Time: 2018-12-30 23:24:49\n",
      "Epoch: 37/50, Step: 18000, D Loss: 0.45250242948532104, G Loss: 2.4507312774658203, GnQ Loss: 3.8636646270751953, Time: 2018-12-30 23:25:17\n",
      "Epoch: 38/50, Step: 18500, D Loss: 0.6623250246047974, G Loss: 2.85317325592041, GnQ Loss: 4.234736919403076, Time: 2018-12-30 23:25:45\n",
      "Epoch: 39/50, Step: 19000, D Loss: 0.3974487781524658, G Loss: 2.5269455909729004, GnQ Loss: 3.9452128410339355, Time: 2018-12-30 23:26:12\n",
      "Epoch: 40/50, Step: 19500, D Loss: 0.4188886880874634, G Loss: 2.5369231700897217, GnQ Loss: 3.9580368995666504, Time: 2018-12-30 23:26:40\n",
      "Epoch: 41/50, Step: 20000, D Loss: 0.3407994210720062, G Loss: 3.624119520187378, GnQ Loss: 5.029040336608887, Time: 2018-12-30 23:27:07\n",
      "Epoch: 42/50, Step: 20500, D Loss: 0.5272151231765747, G Loss: 4.206740856170654, GnQ Loss: 5.593206405639648, Time: 2018-12-30 23:27:35\n",
      "Epoch: 43/50, Step: 21000, D Loss: 0.27013951539993286, G Loss: 3.627254009246826, GnQ Loss: 5.044341087341309, Time: 2018-12-30 23:28:03\n",
      "Epoch: 44/50, Step: 21500, D Loss: 0.5072160959243774, G Loss: 3.70280385017395, GnQ Loss: 5.1103010177612305, Time: 2018-12-30 23:28:30\n",
      "Epoch: 45/50, Step: 22000, D Loss: 0.2912077307701111, G Loss: 3.9208292961120605, GnQ Loss: 5.3316521644592285, Time: 2018-12-30 23:28:58\n",
      "Epoch: 47/50, Step: 22500, D Loss: 0.487556517124176, G Loss: 4.883304595947266, GnQ Loss: 6.296946048736572, Time: 2018-12-30 23:29:25\n",
      "Epoch: 48/50, Step: 23000, D Loss: 0.20651042461395264, G Loss: 2.4411635398864746, GnQ Loss: 3.849189043045044, Time: 2018-12-30 23:29:53\n",
      "Epoch: 49/50, Step: 23500, D Loss: 0.19101279973983765, G Loss: 3.9111595153808594, GnQ Loss: 5.332242965698242, Time: 2018-12-30 23:30:21\n",
      "Epoch: 50/50, Step: 24000, D Loss: 0.21037821471691132, G Loss: 2.5540060997009277, GnQ Loss: 3.9724082946777344, Time: 2018-12-30 23:30:48\n"
     ]
    }
   ],
   "source": [
    "for epoch in range(max_epoch+1):\n",
    "    for idx, (images, labels) in enumerate(data_loader):\n",
    "        step += 1\n",
    "        labels = labels.view(batch_size, 1)\n",
    "        # Training Discriminator\n",
    "        x = images.to(DEVICE)\n",
    "        x_outputs, _, = D(x)\n",
    "        D_x_loss = bce_loss(x_outputs, D_labels)\n",
    "\n",
    "        z, c = sample_noise(batch_size, n_noise, n_c_discrete, n_c_continuous, label=labels, supervised=True)\n",
    "        z_outputs, _, = D(G(z, c))\n",
    "        D_z_loss = bce_loss(z_outputs, D_fakes)\n",
    "        D_loss = D_x_loss + D_z_loss\n",
    "        \n",
    "        D_opt.zero_grad()\n",
    "        D_loss.backward()\n",
    "        D_opt.step()\n",
    "\n",
    "        # Training Generator\n",
    "        z, c = sample_noise(batch_size, n_noise, n_c_discrete, n_c_continuous, label=labels, supervised=True)\n",
    "        c_discrete_label = torch.max(c[:, :-2], 1)[1].view(-1, 1)\n",
    "\n",
    "        z_outputs, features = D(G(z, c)) # (B,1), (B,10), (B,4)\n",
    "        c_discrete_out, cc_mu, cc_var = Q(features)\n",
    "\n",
    "        G_loss = bce_loss(z_outputs, D_labels)\n",
    "        Q_loss_discrete = ce_loss(c_discrete_out, c_discrete_label.view(-1))\n",
    "        Q_loss_continuous = -torch.mean(torch.sum(log_gaussian(c[:, -2:], cc_mu, cc_var), 1)) # N(x | mu,var) -> (B, 2) -> (,1)\n",
    "        mutual_info_loss = Q_loss_discrete + Q_loss_continuous*0.1\n",
    "\n",
    "        GnQ_loss = G_loss + mutual_info_loss\n",
    "\n",
    "        G_opt.zero_grad()\n",
    "        GnQ_loss.backward()\n",
    "        G_opt.step()\n",
    "\n",
    "        if step > 500 and step % 100 == 0:\n",
    "            writer.add_scalar('loss/total', GnQ_loss, step)\n",
    "            writer.add_scalar('loss/Q_discrete', Q_loss_discrete, step)\n",
    "            writer.add_scalar('loss/Q_continuous', Q_loss_continuous, step)\n",
    "            writer.add_scalar('loss/Q', mutual_info_loss, step)\n",
    "            writer.add_histogram('output/mu', cc_mu)\n",
    "            writer.add_histogram('output/var', cc_var)\n",
    "        \n",
    "        if step % 500 == 0:\n",
    "            print('Epoch: {}/{}, Step: {}, D Loss: {}, G Loss: {}, GnQ Loss: {}, Time: {}'\\\n",
    "                  .format(epoch, max_epoch, step, D_loss.item(), G_loss.item(), GnQ_loss.item(), str(datetime.datetime.today())[:-7]))\n",
    "            \n",
    "        if step % 1000 == 0:\n",
    "            G.eval()\n",
    "            img1, img2, img3 = get_sample_image()\n",
    "            imsave('samples/{}_step{}_type1.jpg'.format(MODEL_NAME, str(step).zfill(3)), img1, cmap='gray')\n",
    "            imsave('samples/{}_step{}_type2.jpg'.format(MODEL_NAME, str(step).zfill(3)), img2, cmap='gray')\n",
    "            imsave('samples/{}_step{}_type3.jpg'.format(MODEL_NAME, str(step).zfill(3)), img3, cmap='gray')\n",
    "            G.train()\n",
    "writer.export_scalars_to_json(\"./all_summary.json\")\n",
    "writer.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x2340211fbe0>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nppre+AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x234269ac320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# generation to image\n",
    "G.eval()\n",
    "imshow(get_sample_image()[0], cmap='gray')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x2342b7f5048>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nmT3sU3uYCWBDy+sNAGb9En+U5DcAzlf66MiXmQA+IOkgWQKgEM31+0v61hF+Md9IVpI82vJaAXAK\nQAougnrrxLeO8IteUx96OiikAGid2udndF5JvwQI4CshxBEhxOKWsiSSlS2vqwAk9YxrnfpysdTl\nX4UQx1uGF74ueo/4JoRIA/B7AAdwkdXbeb4BF1G99XRQuBhxPckxAKYCeEgIMaH1m2zu110USzYX\nky8teA3NQ8ExACoBrO0pR4QQsQA+AfAISXPr93q63trx7aKpN6Dng0I5gIGtfk9tKesxkCxv+VkD\nYBuau2vVQohkAGj5KV+mKXh05EuP1yXJapIekl4A/8C/urq/qG9CCC2ab7r3SfqELC+KemvPt4ul\n3nzo6aBwCMBvhRC/EULoANwF4NOeckYIESOEiPO9BjAZwE8tPi1s+dhCADt6xkOgE18+BXCXEEIv\nhPgNgN8COPhLOua76VowG81194v6JoQQAN4EcIrk863e6vF668i3i6HeAtDdM5lBzMj+Ec2zsEUA\nnuhhXwajebY3F8BJnz8AEgHsAVAA4CsAfX4hfzajuTvpQvN48j868wXAEy31mA9gag/4thHACQDH\n0dygk39p3wBcj+ahwXEAOS32x4uh3jrxrcfrrbVFdjRGEEEEAejp4UMEEURwkSESFCKIIIIARIJC\nBBFEEIBIUIgggggCEAkKEUQQQQAiQSGCCCIIQCQoRBBBBAGIBIUIIoggAP8/gq9Sgo0X2yoAAAAA\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x23429f37dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "imshow(get_sample_image()[1], cmap='gray')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def save_checkpoint(state, file_name='checkpoint.pth.tar'):\n",
    "    torch.save(state, file_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Saving params.\n",
    "# torch.save(D.state_dict(), 'D_c.pkl')\n",
    "# torch.save(G.state_dict(), 'G_c.pkl')\n",
    "save_checkpoint({'epoch': epoch + 1, 'state_dict':DnQ.state_dict(), 'optimizer' : DnQ_opt.state_dict()}, 'DnQ_info.pth.tar')\n",
    "save_checkpoint({'epoch': epoch + 1, 'state_dict':G.state_dict(), 'optimizer' : G_opt.state_dict()}, 'G_info.pth.tar')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
